/**
  复合类型
 */
fn main(){
	//1.0 元组 tuple- 元素类型可以不同，个数不能变化
    //定义方式常见有两种：指定每个元素的类型，或者不指定
	//总之这个tuple不知有啥用，访问非常不方便，定义也非常灵活？ 性能还是什么？
    let i:u8=9;
	let my_nums=(0,1,2,3,4,5,6,7,8,99);
	let my_nums32:(u32,u32,u32,u32)=(1000,109393,29992,1992);
    //访问元素的方式-使用点号加序号
	println!("my_nums is:{}",my_nums.9);
	
	//匹配获取，但用于巨长的，并不适合
	let tuple = (1, "hello", 3.14);  
	let (a, b, c) = tuple;  
	println!("a: {}, b: {}, c: {}", a, b, c);


	//2.0 数组 array	- 元素类型必须一致，个数不能变化
    //数组的定义方式足够灵活，访问的方式也更灵活，更接近大部分编程语言,即可以通过索引下标访问，索引从0开始
    let score_arr=[10,20,30,40];
	let food_arr=["大米","糙米","地瓜","包菜","白菜"];
	for i in 0..food_arr.len() {
		println!("第{}个食物:{}",i+1,food_arr[i]);
	}
	
	//3.0 
	print_food(&food_arr);
}

//如果参数定义为 foods:[&str]会报告异常:doesn't have a size known at compile-time
//如果定义为为foods:&[&str] 则可以
fn print_food(foods:&[&str]){
	for i in 0..foods.len() {
	  println!("第{}个食物:{}",i+1,foods[i]);
	}
}
 
